package com.zhx.common.chat.service.strategy.msg;


import com.zhx.common.common.exception.CommonErrorEnum;
import com.zhx.common.common.util.AssertUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * Description:消息处理器工厂
 */

/**
 * 消息处理器工厂类，用于创建和获取消息处理器。
 */
public class MsgHandlerFactory {
    // 策略映射表，用于存储消息类型与对应处理器之间的映射关系
    private static final Map<Integer, AbstractMsgHandler> STRATEGY_MAP
            = new HashMap<>();

    /**
     * 注册消息处理器。
     *
     * @param code     消息类型，用于标识不同类型的消息。
     * @param strategy 消息处理器，处理对应类型的消息。
     */
    public static void register(Integer code, AbstractMsgHandler strategy) {
        STRATEGY_MAP.put(code, strategy);
    }

    /**
     * 获取消息处理器，确保返回值不为空。
     *
     * @param code 消息类型代码，用于查找对应的处理器。
     * @return 对应的消息处理器实例。
     * @throws AssertionError 如果找不到对应的处理器，则抛出异常。
     */
    public static AbstractMsgHandler getStrategyNoNull(Integer code) {
        AbstractMsgHandler strategy = STRATEGY_MAP.get(code);
        // 确保获取到的处理器不为空，否则抛出异常
        AssertUtil.isNotEmpty(strategy, CommonErrorEnum.PARAM_INVALID);
        return strategy;
    }
}

